package com.pv.common.mybatis.handler;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;

import java.io.IOException;

/**
 * Jackson 实现 JSON 字段类型处理器
 *
 * @author hubin
 * @since 2019-08-25
 */
@Slf4j
@MappedTypes({Object.class})
@MappedJdbcTypes(JdbcType.VARCHAR)
public class JacksonTypeHandler {//extends AbstractJsonTypeHandler<Object> {
//    private static ObjectMapper objectMapper = new ObjectMapper();
//    private Class<?> type;
//
//    public JacksonTypeHandler(Class<?> type) {
//        if (log.isTraceEnabled()) {
//            log.trace("JacksonTypeHandler(" + type + ")");
//        }
//        Assert.notNull(type, "Type argument cannot be null");
//        this.type = type;
//    }
//
//    @Override
//    protected Object parse(String json) {
//        try {
//            if (StrUtil.isBlank(json)) {
//                return null;
//            }
//            return objectMapper.readValue(json, type);
//        } catch (IOException e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    @Override
//    protected String toJson(Object obj) {
//        try {
//            return JsonUtils.objToJsonIgnoreNull(obj);
//        } catch (JsonProcessingException e) {
//            throw new RuntimeException(e);
//        } catch (Exception e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    public static void setObjectMapper(ObjectMapper objectMapper) {
//        Assert.notNull(objectMapper, "ObjectMapper should not be null");
//        JacksonTypeHandler.objectMapper = objectMapper;
//    }
}
